//  IProxy.hpp
//  PureMVC_C++
//
//  PureMVC Port to C++ by Tang Khai Phuong <phuong.tang@puremvc.org>
//  PureMVC - Copyright(c) 2006-2011 Futurescale, Inc., Some rights reserved.
//  Your reuse is governed by the Creative Commons Attribution 3.0 License
//
//  中文注释：
//  IProxy接口定义了PureMVC框架中代理的基本行为。
//  代理用于管理应用程序的数据模型，封装对数据的访问和操作。
//

#if !defined(__PUREMVC_INTERFACES_IPROXY_HPP__)
#define __PUREMVC_INTERFACES_IPROXY_HPP__

// STL include
#include <string>
// PureMVC include
#if !defined(__PUREMVC_HPP__)
#define __PUREMVC_INCLUDE__
#include "../PureMVC.hpp"
#endif /* __PUREMVC_HPP__ */

#include "INotifier.hpp"

namespace PureMVC
{
    namespace Interfaces
    {
        /**
             * PureMVC代理的接口定义
             * The interface definition for a PureMVC Proxy.
             *
             * <P>
             * 代理模式用于封装对数据模型的访问和操作，
             * 实现了模型与视图、控制器之间的解耦。
             * Proxy模式负责管理应用程序的数据，
             * 处理数据的加载、保存和操作，
             * 并在数据变化时通知其他组件。</P>
             *
             * <P>
             * IProxy接口继承自INotifier，
             * 使得代理可以发送通知，
             * 通知其他组件数据模型的变化。</P>
             *
             * @see Interfaces/INotifier.hpp PureMVC::Interfaces::INotifier
             */
            struct PUREMVC_API IProxy : public virtual INotifier
        {
            /**
             * Get the Proxy name
             *
             * @return the Proxy instance name
             *
             * 中文注释：
             * 获取代理的名称
             *
             * @return 代理实例的名称
             */
            virtual std::string const& getProxyName(void) const = 0;

            /**
             * Set the data object
             *
             * @param data the data object
             *
             * 中文注释：
             * 设置数据对象
             *
             * @param data 数据对象
             */
            virtual void setData(void const* data) = 0;

            /**
             * Get the data object
             *
             * @return the data as type void*
             *
             * 中文注释：
             * 获取数据对象
             *
             * @return 数据对象，类型为void*
             */
            virtual void const* getData(void) const = 0;

            /**
             * Called by the Model when the Proxy is registered
             *
             * 中文注释：
             * 当代理被注册到Model时由Model调用
             */
            virtual void onRegister(void) = 0;

            /**
             * Called by the Model when the Proxy is removed
             *
             * 中文注释：
             * 当代理从Model中移除时由Model调用
             */
            virtual void onRemove(void) = 0;

            /**
             * 虚析构函数
             * Virtual destructor.
             */
            virtual ~IProxy(void);
        };
    }
}

#endif /* __PUREMVC_INTERFACES_IPROXY_HPP__ */
